/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.mongo; import java.net.UnknownHostException; import com.mongodb.DB; import com.mongodb.MongoClient; import com.mongodb.MongoException; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.SingletonFactoryBean; /** * Factory bean to provide Mongo database connectors. * <p> * This class provides a simple-to-setup and simple-to-use way to access Mongo databases. * The main benefit is simpler configuration, especially if that configuration is in XML. */ public class MongoConnectorFactoryBean extends SingletonFactoryBean<MongoConnector> { /** * The configuration name. */ private String _name; /** * The Mongo instance. */ private MongoClient _mongo; /** * The database. */ private DB _database; /** * The host name. */ private String _host = "localhost"; /** * The host port. */ private int _port = 27017; /** * The database name. */ private String _databaseName = "OpenGamma"; /** * The collection suffix. */ private String _collectionSuffix = ""; /** * Creates an instance. */ public MongoConnectorFactoryBean() { } /** * Creates an instance based on an existing connector. * <p> * This copies the name, mongo and database. * * @param base the base connector to copy, not null */ public MongoConnectorFactoryBean(MongoConnector base) { setName(base.getName()); setMongo(base.getMongo()); setDB(base.getDB()); } //------------------------------------------------------------------------- public String getName() { return _name; } public void setName(String name) { _name = name; } public MongoClient getMongo() { return _mongo; } public void setMongo(MongoClient mongo) { _mongo = mongo; } public DB getDB() { return _database; } public void setDB(DB database) { _database = database; } public String getHost() { return _host; } public void setHost(String host) { _host = host; } public int getPort() { return _port; } public void setPort(int port) { _port = port; } public String getDatabaseName() { return _databaseName; } public void setDatabaseName(String databaseName) { _databaseName = databaseName; } public String getCollectionSuffix() { return _collectionSuffix; } public void setCollectionSuffix(String collectionSuffix) { _collectionSuffix = collectionSuffix; } //------------------------------------------------------------------------- @Override public MongoConnector createObject() { final String name = getName(); // store in variable to protect against change by subclass ArgumentChecker.notNull(name, "name"); final MongoClient mongo = createMongo(); final DB db = createDatabase(mongo); return new MongoConnector(name, mongo, db, getCollectionSuffix()); } /** * Creates the Mongo instance, using the host and port. * * @return the Mongo instance, not null */ protected MongoClient createMongo() { final MongoClient mongo = getMongo(); // store in variable to protect against change by subclass if (mongo != null) { return mongo; } final String host = getHost(); // store in variable to protect against change by subclass final int port = getPort(); // store in variable to protect against change by subclass ArgumentChecker.notNull(host, "host"); try { return new MongoClient(host, port); } catch (UnknownHostException ex) { throw new MongoException(ex.getMessage(), ex); } } /** * Creates the database. * * @param mongo the Mongo instance, not null * @return the database, may be null */ protected DB createDatabase(MongoClient mongo) { final DB db = getDB(); if (db != null) { return db; } final String databaseName = getDatabaseName(); // store in variable to protect against change by subclass ArgumentChecker.notNull(databaseName, "databaseName"); return mongo.getDB(databaseName); } //------------------------------------------------------------------------- @Override public String toString() { return getClass().getSimpleName(); } }